iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0
Modern Web

使用 Kotlin 快速開發 Web 程式 -- Vaadin系列 第 20

Dialog 關閉後更新 Grid 資料 / 顯示儲存的圖檔 - day20

  • 分享至 

  • xImage
  •  

目標

承前篇

當學生資料修改或上傳圖檔後,能夠在 Grid 即時更新修正後的資料,並於點選學生展開顯示該學生相片,如下圖所示。

https://ithelp.ithome.com.tw/upload/images/20211005/20138680BshlhWu8CE.png

https://ithelp.ithome.com.tw/upload/images/20211005/20138680P3bhyotIpi.png

更新Grid

在 Grid 使用 addOpenedChangeListener 傾聽器,監看 dialog 開/關狀態,請開啟AllStudentsView.kt

    dialog = StudentEditDialog().apply {
        this.studentId = student.id
        isDraggable = true; isResizable = true;isCloseOnEsc = false;isCloseOnOutsideClick = false
        addOpenedChangeListener {
            if (!it.isOpened){
                grid.dataProvider.refreshAll()
            }
        }
        open()
    }

在此未判斷是否資料是否有更新

顯示相片

原展開時僅顯示學生成績,現加上相片。請開啟AllStudentsView.kt

  • Image,設定寬度佔30%, 取得 Context 路徑getCurrent().servletContext.contextPath
  • 請留意,網頁採用相對路徑,故不取得本機實際路徑。
    val image = Image()
    image.width = "30%"
    if (!data.photo.isNullOrEmpty())
        image.src = getCurrent().servletContext.contextPath + data.photo
  • 為增加相片,加一層 HorizontalLayout,讓 ImageGrid並排顯示。現要渲染的Component 改為 HorizontalLayout (可和前一篇比較 ComponentRenderer 兩者差異),完整程式如下:
val renderer = ComponentRenderer<HorizontalLayout, Student>{ data: Student ->
    val horizontalLayout = HorizontalLayout()
    val image = Image()
    image.width = "30%"
    if (!data.photo.isNullOrEmpty())
        image.src = getCurrent().servletContext.contextPath + data.photo
    horizontalLayout.add(image)
    val gradeGrid = Grid<Grade>()
    with(gradeGrid){
        setDataLoader(data.grades)
        addColumnFor(Grade::description).setHeader("學期")
        addColumnFor(Grade::mandarin).setHeader("國文")
        addColumnFor(Grade::english).setHeader("英文")
        addColumnFor(Grade::math).setHeader("數學")
        addColumnFor(Grade::pe).setHeader("體育")
        isExpand = true
        isHeightByRows = true
    }
    horizontalLayout.add(gradeGrid)
    horizontalLayout
}

上一篇
上傳檔案 - day19
下一篇
vok-orm 自訂sql 查詢 / db connection - day21
系列文
使用 Kotlin 快速開發 Web 程式 -- Vaadin30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言